/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package DA;

import BE.BEParametrosAlerta;
import java.sql.*;
import javax.swing.JOptionPane;
import BE.BEProducto;
//import java.util.List;
import java.util.ArrayList;
import BE.BEPallet;
import java.util.Date;
/**
 *
 * @author Elessar
 */
public class DAParametrosAlerta {
    
    public BEParametrosAlerta cargarDatos() {
        
        DAConexion bd = new DAConexion();
        Connection con = null;
        Statement s = null;
        ResultSet rs = null;
        BEParametrosAlerta beAlerta;
        
        try
        {
            //guardo los datos del perfil

            con = bd.conectar();
            //JOptionPane.showMessageDialog(null,"Hola mundo","Error",JOptionPane.ERROR_MESSAGE);
            String query = "SELECT * FROM parametrosalerta";
            PreparedStatement p=con.prepareStatement(query);
            rs=p.executeQuery();
            
            beAlerta = new BEParametrosAlerta();
            
            while(rs.next())
            {
                beAlerta.setPorcentaje(rs.getInt("porcentaje"));
                beAlerta.setNumDias1(rs.getInt("numdias1"));
                beAlerta.setNumDias2(rs.getInt("numdias2"));               
            }
        } 
        catch (Exception e) {
            JOptionPane.showMessageDialog(null,"Problema al consultar la base de datos"+e.toString(),"Error",JOptionPane.ERROR_MESSAGE);
            bd.cierraConexion(con);
            return null;
        }
        bd.cierraConexion(con);
        
        return beAlerta;        
    }
    
    
    public String actualizarDatos(BEParametrosAlerta beAlerta)
    {
        DAConexion bd = new DAConexion();
        Connection con = null;
        Statement s = null;
        ResultSet rs = null;       
        
        try
        {
            //guardo los datos del perfil
            con = bd.conectar();
            //JOptionPane.showMessageDialog(null,"Hola mundo","Error",JOptionPane.ERROR_MESSAGE);
            String query = "UPDATE parametrosalerta SET porcentaje=?, numdias1=?, numdias2=? WHERE id=0";
            PreparedStatement p=con.prepareStatement(query);
            p.setInt(1, beAlerta.getPorcentaje());
            p.setInt(2, beAlerta.getNumDias1());
            p.setInt(3, beAlerta.getNumDias2());
            p.execute();
        } 
        catch (Exception e) {
            //JOptionPane.showMessageDialog(null,"Problema al consultar la base de datos"+e.toString(),"Error",JOptionPane.ERROR_MESSAGE);
            bd.cierraConexion(con);
            return "No se pudieron actualizar los datos:"+e.toString();
        }
        bd.cierraConexion(con);
        
        return "Se actualizaron los datos de forma exitosa.";       
        
    }
    
    
    public ArrayList<BEProducto> analizarPorcentaje ()
    {
        DAConexion bd = new DAConexion();
        Connection con = null;
        ResultSet rs = null;
        Statement s = null;
        
        ArrayList<BEProducto> productos = new ArrayList<BEProducto>();
        BEProducto producto = null;
        String query = "SELECT * FROM PRODUCTO WHERE ESTADO = '1' "
                + "AND CANTIDAD <= STOCKMINIMO+STOCKMINIMO*(SELECT PORCENTAJE/100 FROM PARAMETROSALERTA WHERE ID=0)";
        
        try
        {
            con = bd.conectar();
            s = con.createStatement();
            rs = s.executeQuery(query);

            while(rs.next())
            {
                producto = new BEProducto();
                producto.setIdProducto(rs.getInt("IDPRODUCTO"));
                producto.setIdTipoProducto(rs.getInt("IDTIPOPRODUCTO"));
                producto.setNombre(rs.getString("NOMBRE"));
                producto.setCantidad(rs.getInt("CANTIDAD"));
                producto.setDescripcion(rs.getString("DESCRIPCION"));
                producto.setEstado(rs.getInt("ESTADO"));
                producto.setStockMin(rs.getInt("STOCKMINIMO"));
                producto.setFactorVencimiento(rs.getDouble("FACTOR"));

                productos.add(producto);
            }
        } catch (Exception e) {
            JOptionPane.showMessageDialog(null,"Problema al consultar la base de datos",
                                          "Error",JOptionPane.ERROR_MESSAGE);
            bd.cierraConexion(con);
            return null;
        }

        bd.cierraConexion(con);
        return productos;
    }
    
    public ArrayList<BEPallet> analizarVencimiento1(){
        DAConexion bd = new DAConexion();
        Connection con = null;
        ResultSet rs = null;
        Statement s = null;
        
        ArrayList<BEPallet> pallets = new ArrayList<BEPallet>();
        BEPallet pallet = null;
        //Date hoy = new Date();
//        String query = "SELECT PA.IDPALLET, PA.IDPRODUCTO, PA.ESTADO, PA.FECHAVENCIMIENTO, PA.CANTIDAD, "
//                + "PR.IDPRODUCTO, PR.NOMBRE, PR.FACTOR    FROM PALLET PA, PRODUCTO PR "
//                + "WHERE PA.ESTADO = 'UBICADO' AND PA.IDPRODUCTO = PR.IDPRODUCTO AND PR.FACTOR <= 1.5 "
//                + "AND TO_DATE(PA.FECHAVENCIMIENTO,'dd-mm-yyyy') - TO_DATE(CURRENT_DATE,'yyyy-mm-dd') <= "
//                + " (SELECT NUMDIAS1 FROM PARAMETROSALERTA WHERE ID=0)";
        String query = "SELECT PA.IDPALLET, PA.IDPRODUCTO, PA.ESTADO, PA.FECHAVENCIMIENTO, PA.CANTIDAD, "
                     +        "PR.IDPRODUCTO, PR.NOMBRE, PR.FACTOR "
                     + "FROM PALLET PA, PRODUCTO PR "
                     + "WHERE PA.ESTADO = 'UBICADO' "
                     +   "AND PA.IDPRODUCTO = PR.IDPRODUCTO "
                     +   "AND PR.FACTOR <= 1.5 "
                     +   "AND PA.FECHAVENCIMIENTO - CURRENT_DATE <= (SELECT NUMDIAS1 FROM PARAMETROSALERTA WHERE ID=0);";
        
        try
        {
            con = bd.conectar();
            s = con.createStatement();
            rs = s.executeQuery(query);

            while(rs.next())
            {
                pallet = new BEPallet();
                pallet.setIdPallet(rs.getInt("IDPALLET"));                
                pallet.setCantidad(rs.getInt("CANTIDAD"));
                pallet.setFechaVencimiento(rs.getDate("FECHAVENCIMIENTO"));
                BEProducto auxProducto = new BEProducto();
                auxProducto.setIdProducto(rs.getInt("IDPRODUCTO"));
                auxProducto.setNombre(rs.getString("NOMBRE"));
                auxProducto.setFactorVencimiento(rs.getDouble("FACTOR"));
                pallet.setIdProducto(auxProducto);
                pallet.setEstado(rs.getString("ESTADO"));                

                pallets.add(pallet);
            }
        } catch (Exception e) {
            JOptionPane.showMessageDialog(null,"Problema al consultar la base de datos",
                                          "Error",JOptionPane.ERROR_MESSAGE);
            bd.cierraConexion(con);
            return null;
        }

        bd.cierraConexion(con);
        return pallets;
    }
    
    
    public ArrayList<BEPallet> analizarVencimiento2(){
        DAConexion bd = new DAConexion();
        Connection con = null;
        ResultSet rs = null;
        Statement s = null;
        
        ArrayList<BEPallet> pallets = new ArrayList<BEPallet>();
        BEPallet pallet = null;
//        String query = "SELECT PA.IDPALLET, PA.IDPRODUCTO, PA.ESTADO, PA.FECHAVENCIMIENTO, PA.CANTIDAD, "
//                + "PR.IDPRODUCTO, PR.NOMBRE, PR.FACTOR    FROM PALLET PA, PRODUCTO PR "
//                + "WHERE PA.ESTADO = 'UBICADO' AND PA.IDPRODUCTO = PR.IDPRODUCTO AND PR.FACTOR > 1.5 "
//                + "AND TO_DATE(PA.FECHAVENCIMIENTO,'dd-mm-yyyy') - TO_DATE(CURRENT_DATE,'yyyy-mm-dd') <= "
//                + " (SELECT NUMDIAS2 FROM PARAMETROSALERTA WHERE ID=0)";
        String query = "SELECT PA.IDPALLET, PA.IDPRODUCTO, PA.ESTADO, PA.FECHAVENCIMIENTO, PA.CANTIDAD, "
                            + "PR.IDPRODUCTO, PR.NOMBRE, PR.FACTOR "
                     + "FROM PALLET PA, PRODUCTO PR "
                     + "WHERE PA.ESTADO = 'UBICADO' "
                     +   "AND PA.IDPRODUCTO = PR.IDPRODUCTO "
                     +   "AND PR.FACTOR > 1.5 "
                     +   "AND PA.FECHAVENCIMIENTO - CURRENT_DATE <= (SELECT NUMDIAS2 FROM PARAMETROSALERTA WHERE ID=0);";
        
        try
        {
            con = bd.conectar();
            s = con.createStatement();
            rs = s.executeQuery(query);

            while(rs.next())
            {
                pallet = new BEPallet();
                pallet.setIdPallet(rs.getInt("IDPALLET"));                
                pallet.setCantidad(rs.getInt("CANTIDAD"));
                pallet.setFechaVencimiento(rs.getDate("FECHAVENCIMIENTO"));
                BEProducto auxProducto = new BEProducto();
                auxProducto.setIdProducto(rs.getInt("IDPRODUCTO"));
                auxProducto.setNombre(rs.getString("NOMBRE"));
                auxProducto.setFactorVencimiento(rs.getDouble("FACTOR"));
                pallet.setIdProducto(auxProducto);
                pallet.setEstado(rs.getString("ESTADO"));                

                pallets.add(pallet);
            }
        } catch (Exception e) {
            JOptionPane.showMessageDialog(null,"Problema al consultar la base de datos",
                                          "Error",JOptionPane.ERROR_MESSAGE);
            bd.cierraConexion(con);
            return null;
        }

        bd.cierraConexion(con);
        return pallets;
    }
    
    public ArrayList<BEPallet> analizarVencimientoFinal(){
        DAConexion bd = new DAConexion();
        Connection con = null;
        ResultSet rs = null;
        Statement s = null;
        
        ArrayList<BEPallet> pallets = new ArrayList<BEPallet>();
        BEPallet pallet = null;
//        String query = "SELECT PA.IDPALLET, PA.IDPRODUCTO, PA.ESTADO, PA.FECHAVENCIMIENTO, PA.CANTIDAD, "
//                + "PR.IDPRODUCTO, PR.NOMBRE, PR.FACTOR    FROM PALLET PA, PRODUCTO PR "
//                + "WHERE PA.ESTADO = 'UBICADO' AND TO_DATE(PA.FECHAVENCIMIENTO,'dd-mm-yyyy') < TO_DATE(CURRENT_DATE,'yyyy-mm-dd')";
        String query = "SELECT PA.IDPALLET, PA.IDPRODUCTO, PA.ESTADO, PA.FECHAVENCIMIENTO, PA.CANTIDAD, "
                            + "PR.IDPRODUCTO, PR.NOMBRE, PR.FACTOR "
                     + "FROM PALLET PA, PRODUCTO PR "
                     + "WHERE PA.ESTADO = 'UBICADO' "
                     +   "AND PA.IDPRODUCTO = PR.IDPRODUCTO "
                     +   "AND PA.FECHAVENCIMIENTO < CURRENT_DATE;"; //TO_DATE(CURRENT_DATE,'yyyy-mm-dd');
        try
        {
            con = bd.conectar();
            s = con.createStatement();
            rs = s.executeQuery(query);

            while(rs.next())
            {
                pallet = new BEPallet();
                pallet.setIdPallet(rs.getInt("IDPALLET"));                
                pallet.setCantidad(rs.getInt("CANTIDAD"));
                pallet.setFechaVencimiento(rs.getDate("FECHAVENCIMIENTO"));
                BEProducto auxProducto = new BEProducto();
                auxProducto.setIdProducto(rs.getInt("IDPRODUCTO"));
                auxProducto.setNombre(rs.getString("NOMBRE"));
                auxProducto.setFactorVencimiento(rs.getDouble("FACTOR"));
                pallet.setIdProducto(auxProducto);
                pallet.setEstado(rs.getString("ESTADO"));                

                pallets.add(pallet);
            }
        } catch (Exception e) {
            JOptionPane.showMessageDialog(null,"Problema al consultar la base de datos",
                                          "Error",JOptionPane.ERROR_MESSAGE);
            bd.cierraConexion(con);
            return null;
        }

        bd.cierraConexion(con);
        return pallets;
    }
    
}
